#include <stdio.h>
#include <stdlib.h>

//Ignore la casse -i
char* ignoreCase(char* str){
    //Calcul de la longueur de la chaine str
    int length = str_len(str);
    //Allocation m�moire strCopy
    char* strCopy = (char*)malloc(sizeof(char)*length);

    //Lecture de la chaine
    int i = 0;
    for(i; i < length; i++){
        //Si le caract�re est une lettre majuscule
        if(str[i] > 64 && str[i] < 91){
            //Alors on la met en minuscule dans la chaine strCopy
            strCopy[i] = str[i]+32;
        }
        //Sinon on copie le caractere dans la strCopy
        else {
            strCopy[i] = str[i];
        }
    }
    //Affichage du resultat � supprimer
//    printf("%s",strCopy);

    return strCopy;
}


//--------------------------
//Ignore les tabulations -E
char* ignoreTab(char* str){
    //Calcul de la longueur de la chaine str
    int length = str_len(str);
    //Allocation m�moire strCopy
    char* strCopy = (char*)malloc(sizeof(char)*length);
    //Compteur pour strCopy
    int count = 0;

    //Lecture de la chaine
    int i = 0;
    for(i; i < length; i++){
        //Si le caract�re n'est pas une tabulation
        if(str[i] != '\t'){
            //On copie le caract�re dans la chaine strCopy
            strCopy[count] = str[i];
            count++;
        }
    }
    //Affichage du resultat � supprimer
  //  printf("%s",strCopy);

    return strCopy;
}




//--------------------------
//Ignore les tabulations -t
char* expandTab(char* str){
    //Calcul de la longueur de la chaine str
    int length = str_len(str);
    //Allocation m�moire strCopy
    char* strCopy = (char*)malloc(sizeof(char)*length);

    //Lecture de la chaine
    int i = 0;
    for(i; i < length; i++){
        //Si le caract�re est une tabulation

        if(str[i] == '\t'){
            //Alors on met un espace � la place
            strCopy[i] = 32;
        }
        else {
            strCopy[i] = str[i];
        }
    }
    //Affichage du resultat � supprimer
//    printf("%s",strCopy);

    return strCopy;
}




//-------------------------
//Ignore les changement d'espaces -b
char* ignoreSpaceChange(char* str){
    //Calcul de la longueur de la chaine str
    int length = str_len(str);
    //Allocation m�moire strCopy
    char* strCopy = (char*)malloc(sizeof(char)*length);
    //Compteur pour strCopy
    int count = 0;

    //Lecture de la chaine
    int i = 0;
    for(i; i < length; i++){
        //Si deux espace se suivent
        if(str[i] == 32 && str[i+1] == 32){
            //On met un espace � l'indice count, que l'on incr�mente pas
            strCopy[count] = str[i];
        }
        //Sinon on copie le caract�re dans la chaine strCopy et on incr�mente count
        else {
            strCopy[count] = str[i];
            count++;
        }
    }
    //Affichage du resultat � supprimer
//    printf("%s",strCopy);

    return strCopy;
}




//-------------------------
//Ignore les espaces -w
char* ignoreSpace(char* str){
    //Calcul de la longueur de la chaine str
    int length = str_len(str);
    //Allocation m�moire strCopy
    char* strCopy = (char*)malloc(sizeof(char)*length);
    //Compteur pour strCopy
    int count = 0;

    //Lecture de la chaine
    int i = 0;
    for(i; i < length; i++){
        //Si le charact�re n'est pas un espace
        if(str[i] != 32){
            //On copie le caract�re dans la chaine strCopy
            strCopy[count] = str[i];
            count++;
        }
    }
    //Affichage du resultat � supprimer
    //printf("%s",strCopy);

    return strCopy;
}



//--------------------------
//Ignore les double sauts de ligne -B
char* ignoreBlankLines(char* str){
    //Calcul de la longueur de la chaine str
    int length = str_len(str);
    //Allocation m�moire strCopy
    char* strCopy = (char*)malloc(sizeof(char)*length);
    //Compteur pour strCopy
    int count = 0;

    //Lecture de la chaine
    int i = 0;
    for(i; i < length; i++){
        //S'il y a deux retour chariot
         if(str[i] == 10 && str[i+1] == 10){
            //On met un seul \n � l'indice count, que l'on incr�mente pas
            strCopy[count] = str[i];
        }
        //Sinon on copie le caract�re dans la chaine strCopy et on incr�mente count
        else {
            strCopy[count] = str[i];
            count++;
        }
    }
    //Affichage du resultat � supprimer
//    printf("%s",strCopy);

    return strCopy;
}




//--------------------------
//Mettre tout sur une seule ligne strip-Trailing-Cr
char* stripTrailingCr(char* str){
    //Calcul de la longueur de la chaine str
    int length = str_len(str);
    //Allocation m�moire strCopy
    char* strCopy = (char*)malloc(sizeof(char)*length);
    //Compteur pour strCopy
    int count = 0;

    //Lecture de la chaine
    int i = 0;
    for(i; i < length; i++){
        //Si le caract�re n'est pas un retour chariot
         if(str[i] != 10){
            //On le copie dans la strCopy
            strCopy[count] = str[i];
            count++;
        }
    }
    //Affichage du resultat � supprimer
//    printf("%s",strCopy);

    return strCopy;
}


/*
int main(){
    char* test = "Chaine pour\tfaire\tDES tests\nca a l'air de biEn marCHer\n\nOui en EFfEt";
    //ignoreCase(test);
    ignoreTab(test);
    //ignoreSpace(test);
    //ignoreSpaceChange(test);
    //ignoreBlankLines(test);
    //stripTrailingCr(test);
    //expandTab(test);
  return 0;
}*/




